package cn.edu.tjpu.lxy.epr;

public class TestDriver2 {

	/*
	 * 算术运算符：+ - * / %(取余) 
	 * 如果是整数 / 运算，如果产生小数部分会被舍弃（不进行四舍五入）
	 * 
	 */
	
	/*
	 * 移位运算：
	 * 移位运算是对二进制进行操作，注意：计算机操作的二进制全部是以补码的形式存在。
	 * 
	 * >> 右移运算，是在二进制的数制下，向右移动N位，最高位补符号位（如果最高位符号位是1，则补1；如果最高位符号位是0，则补0）
	 *    右移运算等价于 该数除以 2的N次方
	 *    8>>2=2
	 *    0000 1000 --> 0000 0010   = 2
	 *    
	 *    -8>>2=-2
	 *    原码 1000 1000 -> 符号位不变 取反  反码  1111 0111 -> +1 变为补码 1111 1000 （-8 补码）
	 *    1111 1000 右移2为 -> 1111 1110  -> -1 之后：  1111 1101 -> 符号位不变，其他各位取反  原码： 1000 0010 -- -2 
	 *    
	 *    
	 * << 左移运算，是在二进制的数制下，向左移动N位，最低位补0
	 *    等价于该数乘以 2的N次方
	 * 
	 * >>> 带符号的右移运算，是在二进制的数制下，向右移动N位，最高位补0。（符号位会跟着一起移动）   
	 *     符号位会跟着移动，应用较少。只有正数才有意义。
	 *       
	 *    
	 */
	public static void main(String[] args) {
		// 算术运算符
		test01();
		System.out.println("---------------");
		test02();
	}

	
	/**
	 * 算术运算符
	 */
	private static void test01(){
		int iNum1= 11;
		int iNum2 = 3;
		double dNum1 = 3.0;
		
		// 小数部分被舍弃
		System.out.println("iNum1/iNum2="+(iNum1/iNum2)); 
		System.out.println("iNum1%iNum2="+(iNum1%iNum2));
		
		System.out.println("iNum1/dNum1="+(iNum1/dNum1));
		System.out.println("iNum1%dNum1="+(iNum1%dNum1));
	}
	
	/**
	 * 移位运算
	 */
	private static void test02(){
		int iNum1 = 64;
		int iNum2 = 3;
		
		System.out.println("iNum1>>2="+(iNum1>>2));
		System.out.println("iNum1>>>2="+(iNum1>>>2));
		System.out.println("iNum2<<2="+(iNum2<<2));
	}
}
